#ifndef __DYNAMICARRAY_H_
#define __DYNAMICARRAY_H_

#include <stdbool.h>

typedef void* ElementType;    //通用化，不把类型写死（有需要就直接改void*）

//写库上来先定结构体
struct DynamicArray;    //前置声明

typedef struct DynamicArray DArray;

//创建一个动态数组
DArray* InitDArray(int capacity, void (*FreePtr)(ElementType));

//释放动态数组
void FreeDArray(void *a);

//尾部插入数据
bool InsertTail(DArray *a, ElementType element);

//查找某一元素
ElementType FindByElement(DArray *a, ElementType element, bool(*find)(ElementType, ElementType));

//按位置删除
void RemoveByIndex(DArray *a, int index);

//按值删除
void RemoveByElement(DArray *a, ElementType element);

//打印数组
void PrintArray(DArray *a, void (*print)(ElementType));

//快速排序
void DArrayFastSort(DArray *a, bool (*SortPtr)(ElementType, ElementType));

// 二分查找
ElementType BinarySearch(DArray *a, ElementType element, int (*BSearch)(ElementType, ElementType));

#endif